#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"analyse.h"
#include"gestion_capteurs.h"
#include"Personnel.h"

/* fonction qui détermine le nbre de lignes du fichier events */ 
int nbre_lignes()
{char tps[20],cap[20];
 long id;
 int nb_lignes;
FILE *f;
f=fopen("/home/yosr/events.txt","r");
if(f==NULL){
           printf("\n Impossible d'ouvrir le fichier %s","events.txt");
           }
else{  nb_lignes=0;
 while(fscanf(f,"%s%ld%s",tps,&id,cap)!= EOF)   
      {
       nb_lignes++;

      }
fclose(f);
return nb_lignes;
    }
}

int chercher_alertes(une_personne t[],char chemin_ref[])
{
  // chemin_ref[]="E01 C01 S01 L01 C02 I01 L02 V01 D01 ";
    
int nb_pers=0;
FILE *f;
f=fopen("/home/yosr/events.txt","r");
int i,j,k,nb_lignes=nbre_lignes();
char tps[20],cap[20],chemin[500];
long id;

//initialiser le tableau de structures (t=tab_pers: tableau de personnes)

if(f!=NULL)
{
for(j=0;j<nb_lignes;j++)
 {t[j].id=-1; 
 strcpy(t[j].alerte," ");
 strcpy(t[j].chemin," ");
 t[j].indice=0;
 }

// remplissage du tableau

while(fscanf(f,"%s%ld%s",tps,&id,cap)!= EOF)// Lecture de events
{ 
 strcat(cap," "); // pour que les capteurs soient séparés par des espaces 
 i=0; // le compteur qui sert à parcourir le tableau de personnes
 int trouve=0;
 while((trouve==0)&&(i<nb_lignes)) //nb_lignes du fichier events( on n'a pas   encore le nbre de personne donc on a utilisé le nbre de lignes qui est >= nbre_personnel) 
 {    
   if(t[i].id==id)
   {  
      if(strcmp(cap,"Ebola ")==0)
      { 
        strcat(t[i].alerte,cap);// remplissage de la chaine des capteurs qui manquent qui contient parfois le capteur Ebola
        
        strcat(t[i].chemin,cap);//remplissage du parcours de la personne      
        trouve=1;// on a placé le capteur cap dans les chaines donc on passe à la ligne suivante du fichier events
      }
      else if( (strcmp(cap,"B01 ")==0)||(strcmp(cap,"M01 ")==0)||(strcmp(cap,"Sout ")==0)||(strcmp(cap,"Pout ")==0) )
       {strcat(t[i].chemin,cap);      
        trouve=1; 
       }
      else
      {
        strcat(t[i].chemin,cap);
        
        int k,j;
        char ch[5];

/* on copie un seul capteur du chemin de réf dans ch pour comparer cap avec lui */
        
        for(j=0,k=t[i].indice;k<t[i].indice+4;j++,k++)
           {
            ch[j]=chemin_ref[k];
           }
        ch[4]='\0';

        if(strcmp(ch,cap)!=0)
         { char ch2[5];
           strcpy(ch2,ch);
        
           do { 
              strcat(t[i].alerte,ch2); // le capteur existe dans chemin_ref et n'existe pas au parcours de la personne donc c'est un capteur manquant
     
              t[i].indice=t[i].indice+4;// indice sert à avancer dans chemin_ref
          
              int k; 
         // on récupère le capteur suivant du chemin_ref
              for(j=0,k=t[i].indice;k<t[i].indice+4;j++,k++)
                {
                 ch2[j]=chemin_ref[k];
                }

              ch2[4]='\0';
         
               }while((strcmp(ch2,cap)!=0)//on doit trouver cap pour avancer
                &&(t[i].indice<strlen(chemin_ref)));
         }
      
        t[i].indice=t[i].indice+4;     
        trouve=1;
      }    
  }
   else if (t[i].id==-1)
       {
        t[i].id=id;              
        strcat(t[i].chemin,cap);// on ne remplit pas alerte car c sur que E01 existe     
        t[i].indice=t[i].indice +4;     
        trouve=1;  
        nb_pers++;
       }
   else {i++;// le cas ou t[i].id != id
        }
 }
}
}
fclose(f);
return nb_pers;
}

void afficher_alertes(une_personne t[],personnel p)
{int i=0;
 FILE *f;

 printf("Les membres du personnel qui risquent d'avoir l'Ebola sont:\n");
 
 while(t[i].id!=-1)// tant que le tableau est rempli
  { if(strcmp(t[i].alerte," ")!=0)// afficher seulement les personnes ayant une chaine de capteurs manquants(alerte)
      {
       printf("  ID =%ld\n",t[i].id);
  /* importer le nom,prénom et poste du fichier_personnel rempli par la fonction gestion_personnel*/ 
       f=fopen("fichier_personnel","rb");

       if (f!=NULL)
         {
          while((fread(&p,sizeof(personnel),1,f)!=0))
            {
	     if (p.ID==t[i].id)
	       {printf(" Nom= %s \n Prenom= %s \n Poste= %s\n",p.nom,p.prenom,p.poste);
               }
            }

         printf("défaut:\n");
         puts(t[i].alerte);
        }
     fclose(f);
     }
   i++;
  }
}

/*cette fonction est appelée par le bouton 58(Visualiser parcours) du window21*/

char* analyse(char ref[],long ID)
{
 personnel p; 
 int i,j,nbre_personnel,taille_fichier_events=nbre_lignes();
 une_personne tab_pers[100];
 char chemin_ref[200];
 
/* Lire le chemin de référence à partir du fichier ref défini au main.c */
// Ce chemin est enregistré à partir de la fonction gestion_capteurs
 FILE*f; 
 f=fopen(ref,"r");
 fgets(chemin_ref,500,f);
 fclose(f);

 nbre_personnel=chercher_alertes(tab_pers,chemin_ref);

/* Enregistrer les parcours du personnel dans un fichier */

 FILE*f1;
 f1=fopen("/home/yosr/Parcours.txt","w");
 for (i=0;i<nbre_personnel;i++)
    {
     fprintf(f1,"%s\n",tab_pers[i].chemin);       
    }
 fclose(f1);

/* Lire le parcours de la personne choisie (pour l'afficher au window22) */

 char parcours[100];
 FILE*f2;
 f2=fopen("/home/yosr/Parcours.txt","r");
 
 for (i=0;i<nbre_personnel;i++)
   {
     fgets(parcours,100,f2); 
     if(ID==tab_pers[i].id)
      {  return parcours;     
      }
   }
 fclose(f2);

 strcpy(parcours,"identifiant inexistant");

 return parcours;

 //afficher_alertes(tab_pers,p);
}
